--[[
文件名: term_util.lua
描述: 终端工具包
作者: 671643387@qq.com
创建日期: 2025-09-20
]]

local text = require("text")
local term_util = {}

-- 输出带索引的表内容
-- @param table         表
-- @param prefix        前缀
-- @param key_padding   键对齐
term_util.print_tablekey_with_index = function(table, prefix, key_padding)
    prefix = prefix or ""
    key_padding = key_padding or 0
    local index = 1
    for k, v in pairs(table) do
        print(string.format("%s%s %s %s",
            prefix, text.padRight(tostring(index), 2),
            text.padRight(tostring(k), math.max(key_padding, #tostring(k))), v))
        index = index + 1
    end
end

-- 从控制台读取一个数字
-- @param min   最小值
-- @param max   最大值
-- @return 读取到的数字
term_util.read_number = function(min, max)
    while true do
        -- 读取一整行
        local input = io.read("*l")
        -- 尝试转换为数字
        local num = tonumber(input)
        -- 检查是否是数字
        if not num then
            goto continue
        end
        -- 检查最小值
        if min and num < min then
            goto continue
        end
        -- 检查最大值
        if max and num > max then
            goto continue
        end
        do return num end
        ::continue::
    end
end

-- 从控制台读取一行
-- @return 读取到的字符串
term_util.read_str = function()
    return io.read("*l")
end

return term_util
